﻿

// 2013年9月10日0:22:43
// 漠然
// 服务器端类具体实现 通过接口的来实现对客户端的具体隐藏


using System;
using System.Threading;
using Mrsoft.Remote;

namespace Server {

    public delegate void ReicveQuestionImageHandler(int id, byte[] imageBuffer);
    public delegate int AnswerCheckHandler(int id);

    /// <summary>
    /// 远程访问的对象基础
    /// </summary>
    [Serializable]
    public class DatiSeverModel : MarshalByRefObject, IDati {
        /// <summary>
        /// ID生成器
        /// </summary>
        private static int _IdInvoker;

        #region 事件
        /// <summary>
        /// 服务器接收到答题图片事件
        /// 服务器订阅
        /// </summary>
        public static event ReicveQuestionImageHandler ReicveQuestionImage;

        /// <summary>
        /// 服务器收到答案获取
        /// 服务器订阅
        /// </summary>
        public static event AnswerCheckHandler AnswerCheck;
        #endregion

        #region 外部事件
        /// <summary>
        /// 答题问题
        /// </summary>
        /// <param name="imageData">题目图片数据</param>
        /// <returns>返回QuestionID</returns>
        public int SendQuestion(byte[] iamge) {
            //生成答题ID
            int id = Interlocked.Increment(ref _IdInvoker);
            if (ReicveQuestionImage != null)
                ReicveQuestionImage(id, iamge);
            return id;
        }

        /// <summary>
        /// 返回问题的答案
        /// </summary>
        /// <param name="questionId">SendQuestion返回的值</param>
        /// <returns>返回值 负数 为错误 0 为 不能查询到答案 正数：正确的答案</returns>
        public int GetAnswer(int questionId) {
            if (AnswerCheck != null)
                return AnswerCheck(questionId);
            return -1;
        }

        /// <summary>
        /// 连接测试
        /// </summary>
        /// <returns></returns>
        public string ConnectionTest() {
            return "OK";
        }
        #endregion
    }
}